package com.jiangyg.mall.ware.service;

import com.jiangyg.mall.core.support.restful.Pagination;
import com.jiangyg.mall.order.dto.OrderReleaseDTO;
import com.jiangyg.mall.ware.dto.StockReleaseDTO;
import com.jiangyg.mall.ware.dto.WareLockStockDTO;
import com.jiangyg.mall.ware.dto.WareSkuDTO;
import com.jiangyg.mall.ware.vo.WareSkuVO;

import java.util.List;
import java.util.Map;

/**
 * 类描述：商品库存
 *
 * @author jiangyg
 * @email email@jiangyg.com
 * @date 2021-10-18 22:33:26
 */
public interface WareSkuService {

    /**
     * 功能描述：商品库存分页查询
     *
     * @param pagination 分页参数
     * @return 返回分页信息
     */
    Pagination<WareSkuVO> selectPagination(Pagination<WareSkuVO> pagination) throws Exception;

    /**
     * 功能描述：保存或者修改商品库存
     *
     * @param dto 商品库存
     * @return 返回是否操作成功
     */
    boolean saveOrUpdate(WareSkuDTO dto) throws Exception;

    /**
     * 功能描述：根据ID获取WareSku
     *
     * @param wareSkuId 商品库存ID
     * @return 返回商品库存
     */
    WareSkuVO selectById(Long wareSkuId) throws Exception;

    /**
     * 功能描述：批量删除WareSku
     *
     * @param wareSkuIds 要删除的ID数组
     * @return 返回是否操作成功
     */
    boolean delete(List<Long> wareSkuIds);

    /**
     * 功能描述：查询sku是否有库存
     *
     * @param skuIds sku集合
     * @return 结果
     */
    Map<Long, Boolean> inStock(List<Long> skuIds);

    /**
     * 功能描述：锁定库存
     *
     * @param dto 参数
     * @return 是否锁定成功
     */
    boolean lockStock(WareLockStockDTO dto);

    /**
     * 功能描述：解锁库存（通过订单触发解锁）
     *
     * @param dto 参数
     */
    void unlockStock(OrderReleaseDTO dto);

    /**
     * 功能描述：解锁库存（通过工作单触发解锁）
     *
     * @param dto 参数
     */
    void unlockStock(StockReleaseDTO dto);

}

